package com.blog.cmrpersonalblog.service;

import com.blog.cmrpersonalblog.dto.notification.requset.NotificationSettingsUpdateRequest;
import com.blog.cmrpersonalblog.dto.notification.respnose.NotificationSettingsResponse;

/**
 * 通知设置服务接口
 */
public interface NotificationSettingsService {

    /**
     * 获取用户通知设置
     * @param userId 用户ID
     * @return 通知设置
     */
    NotificationSettingsResponse getUserSettings(Long userId);

    /**
     * 更新用户通知设置
     * @param userId 用户ID
     * @param request 更新请求
     * @return 是否成功
     */
    boolean updateUserSettings(Long userId, NotificationSettingsUpdateRequest request);

    /**
     * 重置用户通知设置为默认值
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean resetUserSettings(Long userId);

    /**
     * 初始化用户通知设置（注册时调用）
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean initUserSettings(Long userId);

    /**
     * 检查用户是否开启了某类通知
     * @param userId 用户ID
     * @param notificationType 通知类型
     * @return 是否开启
     */
    boolean isNotificationEnabled(Long userId, String notificationType);

    /**
     * 检查用户是否处于免打扰时段
     * @param userId 用户ID
     * @return 是否处于免打扰时段
     */
    boolean isInDoNotDisturbPeriod(Long userId);

    /**
     * 检查用户是否开启了WebSocket推送
     * @param userId 用户ID
     * @return 是否开启
     */
    boolean isWebSocketEnabled(Long userId);

    /**
     * 检查用户是否开启了邮件通知
     * @param userId 用户ID
     * @param notificationType 通知类型
     * @return 是否开启
     */
    boolean isEmailNotificationEnabled(Long userId, String notificationType);
}

